Skip to content

[Java-Spring] Enable bean validation for spring-http-interface when configured#23609

Open
thiswasdumb wants to merge 5 commits intoOpenAPITools:masterfrom
thiswasdumb:spring-http-useBean
Open

[Java-Spring] Enable bean validation for spring-http-interface when configured#23609
thiswasdumb wants to merge 5 commits intoOpenAPITools:masterfrom
thiswasdumb:spring-http-useBean

Conversation

@thiswasdumb
Copy link
Copy Markdown
Contributor

@thiswasdumb thiswasdumb commented Apr 23, 2026

Description

The current logic for spring-http-interface always sets useBeanValidation and performBeanValidation to false, which serves problematic when fields are expected to not be nullable. This ensures that if they are set to true, the generated classes contain the @NotNull generation alongside those variables.

This MR will fix #23585

Changes

  • modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java I removed the logic which always sets them to false and follows through with setting them based on their expected value.
  • modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java tests to ensure the file is generated as expected

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package || exit
    ./bin/generate-samples.sh ./bin/configs/*.yaml || exit
    ./bin/utils/export_docs_generators.sh || exit
    
    (For Windows users, please run the script in WSL)
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
  • File the PR against the correct branch: master (upcoming 7.x.0 minor release - breaking changes with fallbacks), 8.0.x (breaking changes without fallbacks)
  • If your PR solves a reported issue, reference it using GitHub's linking syntax (e.g., having "fixes #123" present in the PR description)
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

Summary by cubic

Enable bean validation in spring-http-interface when useBeanValidation and performBeanValidation are enabled. Generates @NotNull for required fields and applies @Valid to collection elements and request body lists. Fixes #23585.

  • Bug Fixes
    • Respect useBeanValidation/performBeanValidation instead of forcing false; parse boolean or string values and default to false when unset; removed forced writePropertyBack(USE_BEANVALIDATION, false).
    • Update the warning to only disable documentationProvider and annotationLibrary; keep useJakartaEe defaulted to true.
    • Add a unit test verifying @NotNull generation when both flags are true; regenerate samples to add List<@Valid ...> and nested collection @Valid across variants.

Written for commit 4888232. Summary will update on new commits. Review in cubic

…ted for objects containing required fields
@thiswasdumb thiswasdumb changed the title [Java-Spring] Fixing Logic to Ensure useBeanValidation Is Set to True When Expected [Java-Spring] Enable bean validation for spring-http-interface when configured Apr 23, 2026
@thiswasdumb
Copy link
Copy Markdown
Contributor Author

I'd feel bad pinging because it is such a small change... I just saw the issue and wanted to give a go at addressing it honestly.

Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 2 files

@wing328
Copy link
Copy Markdown
Member

wing328 commented Apr 24, 2026

thanks for the PR

please follow step 3 to update the samples to address https://github.com/OpenAPITools/openapi-generator/actions/runs/24862461150/job/72791337954?pr=23609

@thiswasdumb
Copy link
Copy Markdown
Contributor Author

thanks for the PR

please follow step 3 to update the samples to address https://github.com/OpenAPITools/openapi-generator/actions/runs/24862461150/job/72791337954?pr=23609

Yep sorry I had like 176 files edited when I compiled so I thought I was definitely not doing it right. Was gonna take a look at the errors in the pipeline to know wha to upload, will do this when I get home. Thank you so much for the link!!

@thiswasdumb
Copy link
Copy Markdown
Contributor Author

Added the samples now 👍

@wing328
Copy link
Copy Markdown
Member

wing328 commented Apr 27, 2026

please review the build failure when you've time.

Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 1 file (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java">

<violation number="1" location="modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java:433">
P2: Post-super `containsKey` check can misclassify defaulted `useBeanValidation` as user-specified, preventing intended spring-http-interface defaults.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

Co-authored-by: Copilot <copilot@github.com>
@thiswasdumb
Copy link
Copy Markdown
Contributor Author

I am having issues with spring-http-interface-springboot-4 not generating the jakarta.validation.Valid import while all others are, so I will need to look into this more tomorrow (just leaving this note for now)

Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 1 file (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java">

<violation number="1" location="modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java:436">
P1: Null-unsafe parsing of bean-validation options can throw NPE when properties are not present in additionalProperties.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.


if (configOptions.stream().noneMatch(opt -> USE_BEANVALIDATION.equals(opt.getLeft()))) {
Object val = additionalProperties.get(USE_BEANVALIDATION);
useBeanValidation = val instanceof Boolean ? (Boolean) val : Boolean.parseBoolean(val.toString());
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot Apr 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1: Null-unsafe parsing of bean-validation options can throw NPE when properties are not present in additionalProperties.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java, line 436:

<comment>Null-unsafe parsing of bean-validation options can throw NPE when properties are not present in additionalProperties.</comment>

<file context>
@@ -430,25 +430,14 @@ public void processOpts() {
+
+            if (configOptions.stream().noneMatch(opt -> USE_BEANVALIDATION.equals(opt.getLeft()))) {
+                Object val = additionalProperties.get(USE_BEANVALIDATION);
+                useBeanValidation = val instanceof Boolean ? (Boolean) val : Boolean.parseBoolean(val.toString());
             }
-            if (!additionalProperties.containsKey(PERFORM_BEANVALIDATION)) {
</file context>
Fix with Cubic

@wing328 wing328 modified the milestones: 7.22.0, 7.23.0 Apr 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] useBeanValidation is always false

2 participants